//package nine.test_9_12;
//
//import static eight.test_8_1.TestMain2.dfs;
//
//public class Solution {
//    public int maxPriceValue (int[][] grid) {
//        // write code here
//        int n = grid.length;
//        int m = grid[0].length;
//        int[][] dp = new int[n + 1][m + 1];
//        for (int i = 1; i < n; i++) {
//            for (int j = 1; j < m; j++) {
//                if(grid[i - 1][j - 1] == -1) {
//                    dp[i][j] = -1;
//                    continue;
//                }
//                if(dp[i - 1][j] != -1 && dp[i][j - 1] == -1) {
//                    dp[i][j] = -1;
//                    continue;
//                }
//                dp[i][j] = Math.max(dp[i - 1][j],dp[i][j - 1]) + grid[i - 1][j - 1];
//            }
//        }
//        return dp[n][m];
//    }
//
//    boolean[] bs;
//    int[][] dp;
//    int Max = 0;
//    public int maxPoints (int n, int[] points, int[][] dependencies, int k) {
//        // write code here
//        bs = new boolean[n];
//        dp = new int[n][n];
//        for (int i = 0; i < n; i++) {
//            for (int j = 0; j < n; j++) {
//                dp[i][j] = -1;
//            }
//        }
//        for (int i = 0; i < dependencies.length; i++) {
//            for (int j = 0; j < 2; j++) {
//                bs[dependencies[i][0]] = true;
//                int t = 0;
//                dp[dependencies[i][0]][dependencies[i][1]] = 1;
//            }
//        }
//        int max = 0;
//        for (int i = 0; i < points.length; i++) {
//            if (bs[i]) {
//                continue;
//            }
//            max += points[i];
//            k--;
//            int t = 0;
//            int tmp = 0;
//            while (t < n) {
//                if (dp[i][t] == i) {
//                    dp[i][t] = -1;
//                }
//                if (dependencies[i][1] == -1) {
//                    tmp++;
//                }
//                t++;
//            }
//            if (tmp == n) {
//                bs[i] = false;
//            }
//            dfs(n, points, k, max);
//            max -= points[i];
//            k++;
//            if (dp[i] != -1) {
//                bs[dp[i]] = true;
//
//            }
//            return Max;
//        }
//        private void dfs ( int n, int[] points, int k, int max){
//            if (k == 0) {
//                Max = Math.max(Max, max);
//                return;
//            }
//            for (int i = 0; i < n; i++) {
//                if (bs[i]) {
//                    continue;
//                }
//                max += points[i];
//                k--;
//                if (dp[i] != -1) {
//                    bs[dp[i]] = false;
//                }
//                dfs(n, points, k, max);
//                max -= points[i];
//                k++;
//                if (dp[i] != -1) {
//                    bs[dp[i]] = false;
//                }
//            }
//        }
//    }}


